# 使用场景:
# 1.当我们获取到的数据需要进行四则运算时,需要将数据转换为数值型(float, int)才能参与运算
# 2.比如我们想在数字之前加多个0, int float都不行,只能转换为str类型
# 3.不同中数据类型之间不能相加,所以也需要转换为同种数据类型才能相加(数值型(float,int,bool)都可以相加)

int1 = 10
float1 = 11.9999
str1 = '10'
str2 = '11.2'
str3 = 'abc'

# TODO 常见的数据类型转换函数  int()  float()  str()  eval()

# int()
# float转换为int类型,可以转换成功,但是会将整数末尾所有的小数部分清除
print(int(float1))  # 11
print(type(int(float1)))  # <class 'int'>

print('-----------1------------')
# str类型转换为int类型, 字符串内部必须是整型数据否则报错
print(int(str1))  # 10
print(type(int(str1)))  # <class 'int'>
# ValueError: invalid literal for int() with base 10: '11.2'
# print(int(str2))
# ValueError: invalid literal for int() with base 10: 'abc'
# print(int(str3))

print('-----------2------------')
# float()
# int类型转换为float类型, 可以转化成功,但是在数据末尾需要添加.0
print(float(int1))  # 10.0
print(type(float(int1)))  # <class 'float'>

print('----------3-------------')
# str类型转换为float类型, 如果引号内是整型或者浮点型数据则可以转换成功,否则失败
print(float(str1))  # 10.0
print(type(float(str1)))  # <class 'float'>

print(float(str2))  # 11.2
print(type(float(str2)))  # <class 'float'>

# ValueError: could not convert string to float: 'abc'
# print(float(str3))


print('----------4-------------')
# str()
# 任何数据类型都可以转换为str数据类型
print(str(int1))  # 10
print(type(str(int1)))  # <class 'str'>
print(str(float1))  # 11.9999
print(type(str(float1)))  # <class 'str'>

print('----------5-------------')
# TODO eval() 去除字符串左右两侧的引号,内部是什么就运行什么
str4 = '12'
print(eval(str4))
print(type(eval(str4)))

str5 = '12.6'
print(eval(str5))
print(type(eval(str5)))

str6 = 'False'
print(eval(str6))
print(type(eval(str6)))

# TODO 解释: 将下方字符串左右两侧的引号去除,就是打印hello world 的代码,所以使用eval可以打印hello world
eval("print('hello world')")  # hello world

# NameError: name 'aaa' is not defined
# 将str7左右两侧的引号去除,aaa就是一个变量名,但是变量名没有被定义所以会报错
# 注意: 变量必须先定义再调用
str7 = 'aaa'
print(eval(str7))
print(type(eval(str7)))
